package com.gsbelarus.gedemin.income.fragment;

import android.app.Activity;
import android.content.Context;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;

import com.gsbelarus.gedemin.income.R;
import com.gsbelarus.gedemin.income.activity.Main;
import com.gsbelarus.gedemin.income.sync.DataBaseHelper;
import com.gsbelarus.gedemin.lib.ui.fragment.ListFragmentModel;
import com.gsbelarus.gedemin.lib.ui.viewpager.ViewPagerDateModel;

import java.util.Calendar;
import java.util.List;

public class ViewPagerDateFrgm extends ViewPagerDateModel {

    private SearchView searchView = null;

    @Override
    public List<Calendar> getDatesListInBackground() {
        DataBaseHelper dbh = DataBaseHelper.getInstance(getActivity().getApplicationContext());
        if (argumentsHelper.clientName == null)
            return dbh.getPossibleDatesList(argumentsHelper.slidingDate);
        else
            return dbh.getPossibleDatesListByID(argumentsHelper.id, argumentsHelper.slidingDate);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        if (Main.isDrawerOpen)
            return;
        /** Фрагменты для которых требуется поиск добавлять сюда */
        if (argumentsHelper.className.equals(ClientsMonthListFrgm.class.getName()) ||
                argumentsHelper.className.equals(IncomeFrgm.class.getName())) {
            inflater.inflate(R.menu.search_menu, menu);

            /** пункт меню вынесен в этот класс из ClientsListFrgm для повышения производительности */
            MenuItem menuItem = menu.findItem(R.id.action_search);
            searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
            if (searchView != null)
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String filter) {
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String filter) {

                        /** получаем текущий фрагмент и передаем ему фильтр */
                        mPagerAdapter.startUpdate(mPager);
                        ListFragmentModel frgm = (ListFragmentModel) mPagerAdapter.instantiateItem(mPager, currentPage);
                        mPagerAdapter.finishUpdate(mPager);
                        if (frgm != null) {
                            if (frgm.getAdapter() != null)
                                frgm.getAdapter().getFilter().filter(filter);
                        }
                        return false;
                    }
                });
        }
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        closeAndClearSearch();
    }

    @Override
    public void onPageSelected(int position) {
        closeAndClearSearch();
        super.onPageSelected(position);
    }

    public void closeAndClearSearch() {
        if (searchView != null) {
            /** чистим, скрываем поле поиска и прямчем клавиатуру */
            searchView.setQuery("", false);
            searchView.setIconified(true);
            Activity activity = getActivity();
            if (activity == null) return;

            InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            View view = getView();
            if (view == null) return;

            inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}